package com.office.common.utils.cron;

import java.util.Calendar;
import java.util.Date;

/**
 * 将 Date 转换为精确时间点的 Cron 表达式（仅执行一次）
 *
 * @author: 柒月
 * @date: 2025/5/31 下午8:52
 * @version: 1.0
 */
public class CronUtils {

    /**
     * 将 Date 转换为只执行一次的 Cron 表达式（精确到秒）
     *
     * @param date 指定的时间点
     * @return cron 表达式，格式：秒 分 时 日 月 周几 年（7位 Quartz 格式）
     */
    public static String convertToOnceCron(Date date) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);

        int second = calendar.get(Calendar.SECOND);       // 秒
        int minute = calendar.get(Calendar.MINUTE);       // 分
        int hour = calendar.get(Calendar.HOUR_OF_DAY);   // 小时
        int dayOfMonth = calendar.get(Calendar.DAY_OF_MONTH); // 日
        int month = calendar.get(Calendar.MONTH) + 1;     // 月份从 0 开始，所以 +1
        int year = calendar.get(Calendar.YEAR);           // 年

        // 使用 Quartz 支持的 7 位 Cron 表达式格式（包含年份）
        return String.format("%d %d %d %d %d ? %d", second, minute, hour, dayOfMonth, month, year);
    }
}
